package cn.wolfcode.service;

import cn.wolfcode.common.web.Result;
import cn.wolfcode.domain.SeckillProduct;
import cn.wolfcode.domain.SeckillProductVo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * Created by lanxw
 */
public interface ISeckillProductService {
    /**
     * 根据场次查询对应的秒杀商品集合
     * @param time
     * @return
     */
    List<SeckillProductVo> queryByTime(Integer time);

    /**
     * 根据场次ID和秒杀商品id查询秒杀商品信息
     * @param time
     * @param seckillId
     * @return
     */
    SeckillProductVo find(Integer time, Long seckillId);

    /**
     * 根据秒杀场次和秒杀商品id执行下单操作
     * @param time
     * @param seckillId
     * @return
     */
    Result<String> doSeckill(Integer time, Long seckillId, HttpServletRequest request);

    /**
     * 给秒杀订单的库存执行减一操作
     * @param seckillId:秒杀商品id
     */
    int derStock(Long seckillId);

    /**
     * 从缓存中获取秒杀商品数据
     * @param time
     * @return
     */
    List<SeckillProductVo> queryByTimeFromCache(Integer time);

    /**
     * 实现数据库库存与Redis预库存同步
     * @param time
     * @param seckillId
     */
    void syncStorckCountToRedis(Integer time, Long seckillId);

    /**
     * 给库存执行加一操作
     * @param seckillId
     */
    void incrStockCount(Long seckillId);
}
